package com.queue;

import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

/**
 * SynchronousQueue 同步队列
 * SynchronousQueue不存储元素
 * put了一个元素，必须先take取出一个元素，否则不能再put进去
 */
public class SynchronousQueueDemo {

    public static void main(String[] args) {

        SynchronousQueue synchronousQueue = new SynchronousQueue();//同步队列

        new Thread(() -> {

            try {
                System.out.println(Thread.currentThread().getName() + "put 1");
                synchronousQueue.put("1");
                System.out.println(Thread.currentThread().getName() + "put 2");
                synchronousQueue.put("2");
                System.out.println(Thread.currentThread().getName() + "put 3");
                synchronousQueue.put("3");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "T1").start();


        new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(2);
                System.out.println(Thread.currentThread().getName() + "取出" + synchronousQueue.take());
                TimeUnit.SECONDS.sleep(2);
                System.out.println(Thread.currentThread().getName() + "取出" + synchronousQueue.take());
                TimeUnit.SECONDS.sleep(2);
                System.out.println(Thread.currentThread().getName() + "取出" + synchronousQueue.take());

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }, "T2").start();

    }

}


